package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
	"github.com/hyperledger/fabric-contract-api-go/contractapi"
)

// 定义合约
type InjectionContract struct {
	contractapi.Contract
}

// 调用放电接口
// 参数：买卖方id，充放电量
func (s *InjectionContract) GetOutputRequest(id string, inputs float32, outputs float32) {
	OutputURL := "http://172.29.19.176:5000/injection/F0_house_A0&1.0&1.0"

	// 要传的数据
	requestData := []map[string]interface{}{
		{"id": id, "inputs": inputs, "outputs": outputs},
	}
	requestBody, err := json.Marshal(requestData)
	if err != nil {
		fmt.Println("请求数据转换失败：", err)
		return
	}

	// 发送 POST 请求
	resp, err := http.Post(OutputURL, "application/json", bytes.NewBuffer(requestBody))
	if err != nil {
		fmt.Println("请求接口失败：", err)
		return
	}
	defer resp.Body.Close()

	// 解析响应数据
	var responseData map[string]interface{}
	err = json.NewDecoder(resp.Body).Decode(&responseData)
	if err != nil {
		fmt.Println("解析响应数据失败：", err)
		return
	}

	// 输出响应结果（返回1）
	fmt.Println(responseData)
}

// 更改电表信息
// 参数：买卖方id，充放电量
func (s *InjectionContract) Update(ctx contractapi.TransactionContextInterface, id string, inputs float32, outputs float32) error {
	userJSON, err := ctx.GetStub().GetState(id)
	if err != nil {
		return err
	}
	if userJSON==nil {
		return fmt.Errorf("the user %s does not exist", id)
	}

	var user User
	err = json.Unmarshal(userJSON, &user)
	if err != nil {
		return err
	}
	user.Inputs = inputs
	user.Outputs = outputs
	user.Total = user.Total + inputs - outputs

	userJSON, err = json.Marshal(user)
	if err != nil {
		return err
	}

	return ctx.GetStub().PutState(id, userJSON)
}



// //合约入口主函数
// func main() {
// 	chaincode, err := contractapi.NewChaincode(&InjectionContract{})
// 	if err != nil {
// 	  log.Panicf("Error creating injection chaincode: %v", err)
// 	}
  
// 	if err := chaincode.Start(); err != nil {
// 	  log.Panicf("Error starting injection chaincode: %v", err)
// 	}
//   }